#include "bsp.h"


#if HardwareType == Common_Hardware_Type



void LED_Init(void)
{
    GPIO_InitTypeDef  GPIO_InitStruct = {0};

    LED_BLUE_PORT_CLK_ENABLE();
    LED_GREEN_PORT_CLK_ENABLE();
    LED_YELLOW_PORT_CLK_ENABLE();
    
    GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull  = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;

    GPIO_InitStruct.Pin = LED_BLUE_PIN;
    HAL_GPIO_Init(LED_BLUE_PORT, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = LED_GREEN_PIN;
    HAL_GPIO_Init(LED_GREEN_PORT, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = LED_YELLOW_PIN;
    HAL_GPIO_Init(LED_YELLOW_PORT, &GPIO_InitStruct);

    LED_Off(LED_B);
    LED_Off(LED_G);
    LED_Off(LED_Y);
}

void camera_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct={0};
  __HAL_RCC_GPIOA_CLK_ENABLE();

  GPIO_InitStruct.Pin = Tigger_MD2_PIN;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_PULLUP;   
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
	
  HAL_GPIO_Init(Tigger_MD2_PORT, &GPIO_InitStruct);

  HAL_GPIO_WritePin(Tigger_MD2_PORT, Tigger_MD2_PIN, GPIO_PIN_RESET);
}

void LED_On(LED_COLOR color)
{
    switch (color)
    {
        case LED_B:
            HAL_GPIO_WritePin(LED_BLUE_PORT, LED_BLUE_PIN, GPIO_PIN_RESET);
            break;
        case LED_G:
            HAL_GPIO_WritePin(LED_GREEN_PORT, LED_GREEN_PIN, GPIO_PIN_RESET);
            break;
        case LED_Y:
            HAL_GPIO_WritePin(LED_YELLOW_PORT, LED_YELLOW_PIN, GPIO_PIN_RESET);
            break;
        default:
            break;
    }
}


void LED_Off(LED_COLOR color)
{
    switch (color)
    {
        case LED_B:
            HAL_GPIO_WritePin(LED_BLUE_PORT, LED_BLUE_PIN, GPIO_PIN_SET);
            break;
        case LED_G:
            HAL_GPIO_WritePin(LED_GREEN_PORT, LED_GREEN_PIN, GPIO_PIN_SET);
            break;
        case LED_Y:
            HAL_GPIO_WritePin(LED_YELLOW_PORT, LED_YELLOW_PIN, GPIO_PIN_SET);
            break;
        default:
            break;
    }    
}

void LED_Turn(LED_COLOR color)
{
    switch (color)
    {
        case LED_B:
            HAL_GPIO_TogglePin(LED_BLUE_PORT, LED_BLUE_PIN);
            break;
        case LED_G:
            HAL_GPIO_TogglePin(LED_GREEN_PORT, LED_GREEN_PIN);
            break;
        case LED_Y:
            HAL_GPIO_TogglePin(LED_YELLOW_PORT, LED_YELLOW_PIN);
            break;
        default:
            break;
    }    
}



#elif HardwareType == Engineer_Hardware_Type


void LED_Init(void)
{
    GPIO_InitTypeDef  GPIO_InitStruct = {0};

    LED_PORT_CLK_ENABLE();
    __HAL_RCC_GPIOB_CLK_ENABLE();
    GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull  = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
	
    GPIO_InitStruct.Pin = LED_PIN;
    HAL_GPIO_Init(LED_PORT, &GPIO_InitStruct);

	GPIO_InitStruct.Pin = GPIO_PIN_0;
    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
	
	GPIO_InitStruct.Pin = GPIO_PIN_7;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_SET); 
	HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_SET); 
    LED_Off();
}



void LED_On(void)
{
    HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_RESET);                
}


void LED_Off(void)
{
    HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_SET);  
}


void LED_Turn(void)
{ 
    HAL_GPIO_TogglePin(LED_PORT, LED_PIN);        
}


#endif
